Tutorial 8: Visualização de Dados com ggplot I

Introdução: Visualização de Dados com ggplot.

Nas semanas anteriores, cobrimos três tarefas fundamentais em R. Começamos com uma introdução bÔsica ao R. Demos nosso segundo passo aprendendo a usar os pacotes do tidyverse. Neste ambiente, aprendemos a usar o dplyr para manipulação de dados, e conectar dados relacionais, e o tidyr para organizar nossos bancos de dados.

Este semana vamos um passo adiante em nossa aprendizado. Aprenderemos sobre como utilizar o R para visualizar seus dados. Para isto, utilizaremos a pacote ggplot, que tambƩm faz parte do tidyverse.

Este tutorial Ć© inspirado no excelente livro Data Visualization:A practical introduction de Kieran Healy.

Porque investir em boas visualizaƧƵes ?

Enquanto acadêmicos, uma das habilidades mais importantes que você precisa adquirir é a capacidade de comunicar de forma efetiva seus resultados, sejam esses simples dados exploratórios, até modelos estatísticos rebuscados. A meu ver, mma visualização efetiva e bem pensada é sempre mais atraente do que uma tabela. O público em geral, incluindo nossos colegas acadêmicos, não saberão onde olhar e como analisar uma tabela cheia de números, enquanto um bom grÔfico pode ser bastante intuitivo de seguir.

Nosso itinerƔrio.

Para aprendar sobre visualização de dados, vamos percorrer os seguintes passos.

  1. Preparaçao de Dados: Porquê preciso dos meus dados Tidy?

  2. Introdução ao ggplot: Geoms and Aesthetics

  3. AcessƔrios dos grƔficos: labels, escalas, tƭtulos, e outros.

  4. Casos Aplicados: reproduzindo grÔficos de artigos acadêmicos.

Preparação dos Dados: Porquê preciso dos meus dados Tidy?

Ter seus dados em formato tidy é fundamental para o uso do ggplot. 80% do trabalho de visualização de dados estÔ em preparar seus dados, os outros 20% é pensar quais dados utilizar e como botar em código.

Nós aprendemos semana passsada, porém a guisa de revisão. As três propriedades mais importantes que definem um banco de dados tidy são:

  • Cada coluna Ć© uma variĆ”vel.

  • Cada linha Ć© uma observação.

  • Cada valor em uma linha.

Vamos ver estas regras visualmente:

E porque Ć© importante ter nossos dados em formato tidy quando pensamos em visualização? O ggplot funciona conectando colunas com visuais. E para fazer isto, precisamos de que cada coluna seja uma variĆ”vel – exatament como dados tidy sĆ£o organizados.

Introducao ao ggplot.

Visualização de dados envolve conectar (mapear) variÔveis em seu banco de dados a representações grÔficas. O ggplot fornece uma linguagem unificada para este processo de variÔveis -> grÔfico. HÔ outras formas e outros pacotes de visualização em R. O ggplot é uma destas linguagens.

Grammar of Graphics.

O ggplot Ʃ baseado na Grammar of Graphics. A grammar of graphics Ʃ uma linguagem desenvolvida para criar e descrever de forma unificada visualizaƧƵes grƔficas. Esta linaguem funciona com duas regras fundamentais:

  • Os grĆ”ficos sĆ£o construĆ­dos em camadas.

  • Cada variĆ”vel precisa ser mapeada a uma representação grĆ”fica.

Segue abaixo uma visualização grÔfica da Grammar of Graphics.. Discutiremos ao longo destas aulas cada uma das camadas de funcionamento da Grammar of Graphics.

ggplot: intuição.

O ggplot implementa o framework do Grammar of Graphics em R. Como esperado, Cada grƔfico Ʃ construƭdo camada por camada:

  • ComeƧando com seus dados,
  • Mapeamento Dados -> Visuais (aes),
  • DecisƵes geomĆ©tricas (geoms) e,
  • Embelezamento do grĆ”fico (scale, theme e labels).

E sua lógica fundamental funciona conectando variÔveis a representações grÔficas por meio de uma função chamada aesthethics mapping (aes).

O grÔfico abaixo de Kieran Healy resume bem a lógica:

ggplot: na prƔtica.

Quatro ā€œgrandeā€ etapas definem nosso trabalho de visualização:

  1. Etapa dos Dados: Define qual banco de dados vocĆŖ pretende visualizar

  2. Etapa de Mapear: Define quais variÔveis -> representações grÔficas você pretende visualizar.

  3. Etapa de Geom: Define como vocĆŖ pretende visualizar.

  4. Etapa de Embelezamento: Labels, escalas, coordenados, temas….

Exemplo BƔsico.

Vamos ver um exemplo bƔsico de como funciona o ggplot utilizando o banco de dados gapminder.

Em abstrato

Com Dados.

library(tidyverse)
library(gapminder)

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa de Mapear
      geom_point() # Etapa do Geom

Geoms: Como queremos visualizar nossos dados?

As geom_function controlam o tipo de grÔfico que pretendemos visualizar. Por exemplo, grÔficos de dispersão, barras, mapas, linhas, boxplots, densidade, cada tipo de grÔfico representa uma geom_function() diferente. Vamos ver diversos exemplos a seguir.

Tipos de GrƔfico: Uma variƔvel.

Todos estes grÔficos necessitam desomente uma variÔvel como input (no eixo x). Os valores do eixo y são calculados diretamente pelo ggplot, de acordo com o grÔfico do seu interesse. Vamos ver alguns exemplos.

geom_density

Vamos gerar um grƔfico simples de densidade. Vamos plotar a densidade dos valores de expectativa de vida usando os dados do gapminder.

ggplot(data=gapminder,  # dados
        mapping=aes(x=lifeExp)) + # mapear
      geom_density() # forma geomƩtrica

Customizar o grƔfico usando as representaƧƵes grƔficas fill e alpha.

ggplot(data=gapminder,  # dados
        mapping=aes(x=lifeExp)) + # mapear
      geom_density(alpha=.5, fill="tomato2") # forma geomƩtrica

geom_histogram

Semelhante à densidade, porém, com histograms, os valores do eixo x são agrupados em intervalos (bins), e os valores do y são a soma de casos nestes intervalos.

ggplot(data=gapminder,  # dados
        mapping=aes(x=lifeExp)) + # mapear
      geom_histogram() # forma geomƩtrica

Mais algumas customizaƧƵes, utilizando as representaƧƵes grƔficas color e fill e ajudstando a largura dos intervalos em x.

ggplot(data=gapminder,  # dados
        mapping=aes(x=lifeExp)) + # mapear
      geom_histogram(bins=50, color="black", 
                     fill="lightgreen") # forma geomƩtrica

geom_bar (variƔvel discreta)

geom_bar funciona da mesma forma que geom_hist, porém a variÔvel x é categórica (discreta). Dessa forma, o y serÔ a soma de observações em cada grupo presente em x.

ggplot(data=gapminder,  # dados
        mapping=aes(x=continent)) + # mapear
      geom_bar() 

Perceba, o eixo y Ʃ a soma de cada continente. Internamente, o ggplot usa o group_by() + summarize() para somar as observaƧƵes em cada grupo. Isto Ʃ diferente de plotar dados jƔ agrupados. Para isto, precisamos alterar o input de geom_bar. Por exemplo:

g_grouped <- gapminder %>%
              count(continent)


ggplot(data=g_grouped,  # dados
       # adiciona o y
        mapping=aes(x=continent, y=n)) + # mapear
        # adiciona identity
        geom_bar(stat="identity")   

Tipos de GrƔfico: Contƭnua x Contƭnua.

geom_point

Quando trabalhamos com duas variÔveis contínuas, o uso de grÔfico de dispersão (com pontos) é em geral a escolha mais intuitiva. Como esperado, este tipo de grÔfico necessita de no mínimo duas variÔveis (xe y), e ambas precisam ser contínuas. Vejamos um exemplo.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa de Mapear
      geom_point() # Etapa do Geom

Vamos alterar outras representaƧƵes grƔficas: shape altera a formato dos pontos e size controla o tamanho dos pontos.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa de Mapear
      geom_point(shape=22, alpha=.5, 
                 fill="tomato2", 
                 color="black", 
                 size=2) # Etapa do Geom

geom_smooth

O geom_smooth adiciona uma curva para descrever de forma intuitiva o padrão de associação dos seus dados.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa de Mapear
      geom_smooth(fill="steelblue", 
                 color="black", 
                 size=1, alpha=.3) # Etapa do Geom

MĆŗltiplos geoms.

O gŕafico acima Ć© pouco intuitivo sem a inclusĆ£o dos pontos em si. Lembre-se que o ggplot funciona em camadas, portanto, podemos facilmente combinar mĆŗltiplas formas geomĆ©tricas em um Ćŗnico grĆ”fico. Somente precisamos incluir todos os dados e variĆ”veis nas nossas representaƧƵes grĆ”ficas.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa de Mapear
      
      # Pontos
      
    geom_point(shape=22, alpha=.2, 
                 fill="tomato2", 
                 color="black", 
                 size=2) + # Etapa do Geom

  
      # TendĆŖncia
    
      geom_smooth(fill="tomato2", 
                 color="black", 
                 size=1, alpha=.6) # Etapa do Geom

Tipos de GrƔfico: Discreta x Contƭnua.

geom_boxplot

O geom_boxplot combina variÔveis de tipo distintos. Utilizamos esta forma geométrica quando pretendemos apresentar um valor contínuo dividiso por outros valores categórico (grupos). O boxplot agrega esta variÔvel contínua e apresenta de forma intuitiva sua dispersão e medida central de cada grupo (mediana).

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=continent)) + # Etapa de Mapear
      
      # Pontos
      
    geom_boxplot(fill="tomato2", 
                 color="black", 
                 size=1.5, 
                 alpha=.5)  # Etapa do Geom

RepresentaƧƵes GrƔficas (aes)

AtĆ© aqui, usamos basicamente duas representaƧƵes grĆ”ficas dentro das nossa função de mapear (aes): os eixos x e y. Intuitivamente, costumamos pensar nos eixos x e y como as Ćŗnicas variĆ”veis no banco de dados e consideramos outros elementos dos grĆ”ficos – cores, transparĆŖncia, formato – como acessórios.

Esta não é a forma como o ggplot funciona.

Todas as representaƧƵes grĆ”ficas – color, fill, shape, alpha, linetype, etc… – podem ser mapeadas a variĆ”veis do seu banco de dados. Este processo funciona adicionando mais elementos dentro da nossa função de mapear (aes).

Quais Representações grÔficas (aes) estão disponíveis?

As principais representações grÔficas são as seis acima apresentadas.

Cada uma destas representações combinarÔ melhor com grÔficos distintos, e com objetivos distintos da sua anÔlise. Todas as variÔveis que você pretende visualizar do seu banco de dados precisar ser mapeada em seu objeto do ggplot. Este mapeamento se dÔ a partir da função aes(). As suas representações grÔficas não definem como você mostrarÔ seus dados, mas somente o que você pretende mostrar e usando qual representação grÔfica.

Vamos ver alguns exemplos de como mapear variƔveis -> representaƧƵes grƔficas.

Color: Para Colorir Dados Agrupados.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap, # Etapa de Mapear
           color=continent)) + # Com fill
      geom_point() # Etapa do Geom

Fill: Para Preencher Dados Agrupados.

ggplot(data=gapminder,  # dados
        mapping=aes(x=lifeExp, fill=continent)) + # mapear
      geom_density(alpha=.5) # forma geomƩtrica

gap_grouped <- gapminder %>%
                group_by(year, continent) %>%
                summarise(m=mean(lifeExp, na.rm = TRUE))

ggplot(data=gap_grouped,  # dados
        mapping=aes(x=year, y=m, 
                    fill=continent)) + # mapear
      geom_bar(stat="identity", position="dodge") 

Alpha e size: Para mostrar variação em valores.

ggplot(data=gapminder, ## Etapa dos Dados
       aes(y=lifeExp, x=gdpPercap)) + # Etapa mapear 
      geom_point(aes(alpha=pop, 
           size=log(pop))) + # addicionar representaƧƵes grƔficas
      geom_smooth(color="red") + # Etapa do Geom
      scale_x_log10()

Shape

gap_grouped <- gapminder %>%
                group_by(year, continent) %>%
                summarise(m=mean(lifeExp, na.rm = TRUE))

ggplot(data=gap_grouped, ## Etapa dos Dados
       aes(y=m, x=year, 
           shape=continent)) + # Etapa mapear 
      geom_point(size=3) +
      geom_line()

Desafio:

Descreva o grƔfico abaixo usando o que aprendemos do ggplot e grammar of graphics.

  • Quantas VariĆ”veis?

  • Quantas RepresentaƧƵes GrĆ”ficas?

  • Quais Geoms?

  • Quais RepresentaƧƵes GrĆ”ficas?